//! \file CConfiguration.h
//! \brief TODO: Document
// -----------------------------------------------------------------------------
//! This program is free software; you can redistribute it and/or
//! modify it under the terms of the GNU General Public License
//! as published by the Free Software Foundation; either version 2
//! of the License, or (at your option) any later version.
//!
//! This program is distributed in the hope that it will be useful,
//! but WITHOUT ANY WARRANTY; without even the implied warranty of
//! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//! GNU General Public License for more details.
//!
//! You should have received a copy of the GNU General Public License
//! along with this program; if not, write to the Free Software Foundation,
//! Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
// -----------------------------------------------------------------------------

#include "System.h"
#include "CParameterList.h"
//#include "CParameter.h"
#include <string>
#include <vector>

#ifndef dCONFIGURATION_H_
  #define dCONFIGURATION_H_

  namespace code_sheriff
  {

    class CConfiguration
    {
      public:
//        Configuration();            TODO: remove
//        virtual ~Configuration();
        static CConfiguration* getSingleton();

        int parseCommandLine(int argc, char* argv[]);
        TERROR loadConfiguration(void);

//        int get(std::string Key, int* pValue); TODO: cleanup
        TERROR getValue(TKEY Key, std::string& Value, int Index = 0);

      private:

        // Singleton
        static CConfiguration* m_pSingleton;                 // (Singleton) Instance.
        CConfiguration();                                    // (Singleton) Private so that it can  not be called
        CConfiguration(CConfiguration const&);                // (Singleton) Don't implement.
        CConfiguration& operator=(CConfiguration const&);     // (Singleton) Don't implement.


        CParameterList m_ParameterList;

        TERROR parseLongOption(std::string Option);
        TERROR parseShortOption(std::string Option);



        TERROR printKeyValues(void);



        // TODO: lots n lots of configuration options...
//        Key/value pairs where hte key is a string, get and set via the key




    };

  } // namespace code_sheriff

#endif // dCONFIGURATION_H_




